package org.monster.context.core;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 应用文件
 *
 * @author Monster
 */
public class ApplicationFile {

    /**
     * 目录
     */
    private final List<String> catalogs = new ArrayList<>();

    /**
     * 获取src路径
     *
     * @param appName 应用名
     * @return src路径
     */
    public static String getSrcPath(String appName) {
        return Constants.APPS_PATH + appName + File.separator + Constants.SOURCE_SRC;
    }

    /**
     * 获取类库路径
     *
     * @param appName 应用名
     * @return 类库路径
     */
    public static String getLibPath(String appName) {
        return Constants.APPS_PATH + appName + File.separator
                + Constants.XML_PATH + Constants.SOURCE_LIB;
    }

    /**
     * 获取 服务器类库路径
     *
     * @return 服务器类库路径
     */
    public static String getApplicationLibPath() {
        return Constants.APPLICATION_PATH + File.separator + Constants.SOURCE_LIB;
    }

    /**
     * 获取 上下文路径
     * 某一个项目的绝对路径
     *
     * @param appName 应用名
     * @return 上下文路径
     */
    public static String getAppContextPath(String appName) {
        return Constants.APPS_PATH + appName;
    }

    /**
     * 获取
     * 获取指定项目下的web.xml文件路径
     *
     * @param appName 应用名
     * @return
     */
    public static String getPathWebXml(String appName) {
        return appName + File.separator + Constants.XML_PATH
                + Constants.WEB_XML_FILE;
    }

    /**
     * 获取指定项目下的web.xml文件路径
     *
     * @param appName 应用名
     * @return 网xml路径
     */
    public static String getPathWebXml2(String appName) {
        return appName + File.separator + Constants.XML_PATH_2
                + Constants.WEB_XML_FILE;
    }

    /**
     * 获取WebApps的路径
     *
     * @return 应用玲
     */
    public static String getAppsPath() {
        return Constants.APPS_PATH;
    }

    /**
     * 获取某一个webApp项目的路径
     *
     * @param appName 应用名
     * @return 应用路径
     */
    public static String getAppPath(String appName) {
        return getAppsPath() + appName + File.separator;
    }

    /**
     * 遍历srcPath
     *
     * @param appName 应用名
     * @return
     */
    public List<String> getSrcPathUnder(String appName) {
        String srcPath = getSrcPath(appName);
        recurrenceDirectory(new File(srcPath));
        return catalogs;
    }

    /**
     * 递归文件夹
     *
     * @param file 文件
     */
    public void recurrenceDirectory(File file) {
        if (file.isDirectory()) {
            catalogs.add(file.getAbsolutePath());
            File[] files = file.listFiles();
            if (files != null) {
                for (File f : files) {
                    recurrenceDirectory(f);
                }
            }
        }
    }

    /**
     * 请求递归的容器
     */
    public void clearCatalogs() {
        catalogs.clear();
    }

    /**
     * 根据项目名获取libpPath下的所有jar
     *
     * @param appName 应用名
     */
    public void getJarPaths(String appName) {
        String libPath = getLibPath(appName);
        File file = new File(libPath);
        getFiles(file);
    }

    /**
     * 获取服务器下的libpath的所有jar
     */
    public void getLibPathJars() {
        String libPath = getApplicationLibPath();
        File file = new File(libPath);
        getFiles(file);
    }

    /**
     * 遍历文件对象
     *
     * @param file 文件
     */
    private void getFiles(File file) {
        if (file != null) {
            File[] files = file.listFiles();
            if (files != null) {
                for (File f : files) {
                    if (f.isFile()) {
                        catalogs.add(f.getAbsolutePath());
                    }
                }
            }
        }
    }
}
